﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace Formation_Entreprise
{
    /// <summary>
    /// La classe AccesTableEntreprise contient toutes les méthodes
    /// d'accès pour la table Entreprise
    /// </summary>
    class AccesTableEntreprise
    {
        //**********************//
        //Ajouter une entreprise//
        //**********************//
        public static int AjouterEntreprise(objEntreprise entreprise)
        {
            //requete à utiliser avec les données donnés en params
            string query = "INSERT INTO [Entreprise] ([NomEntreprise],[Contacte],[Courriel],[SecteurActivité],[Adresse],[Ville],[Telephone],[CodePostal],[Conseiller],[Repertoire]) VALUES (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10)";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", entreprise.Entreprise);
            oledbcmd.Parameters.AddWithValue("@p2", entreprise.Contact);
            oledbcmd.Parameters.AddWithValue("@p3", entreprise.Courriel);
            oledbcmd.Parameters.AddWithValue("@p4", entreprise.SecteurActivite);
            oledbcmd.Parameters.AddWithValue("@p5", entreprise.Adresse);
            oledbcmd.Parameters.AddWithValue("@p6", entreprise.Ville);
            oledbcmd.Parameters.AddWithValue("@p7", entreprise.Telephone);
            oledbcmd.Parameters.AddWithValue("@p8", entreprise.CodePostal);
            oledbcmd.Parameters.AddWithValue("@p9", entreprise.Conseiller);
            oledbcmd.Parameters.AddWithValue("@p10", entreprise.Path);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Ajout de l'entreprise
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //**********************//
        //Modifier une Entreprise//
        //**********************//
        public static int ModifierEntreprise(objEntreprise entreprise)
        {
            //requete à utiliser avec les données donnés en params
            string query = "UPDATE [Entreprise] SET [Contacte]=?, [Courriel]=?, [SecteurActivité]=?, [Adresse]=?, [Ville]=?, [Telephone]=?, [CodePostal]=?, [Conseiller]=?, [Repertoire]=?, [Note]=? WHERE [NomEntreprise]=?;";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //Parametres de la requete         
            oledbcmd.Parameters.AddWithValue("@Contact", entreprise.Contact);
            oledbcmd.Parameters.AddWithValue("@Courriel", entreprise.Courriel);
            oledbcmd.Parameters.AddWithValue("@SecteurActivite", entreprise.SecteurActivite);
            oledbcmd.Parameters.AddWithValue("@Adresse", entreprise.Adresse);
            oledbcmd.Parameters.AddWithValue("@Ville", entreprise.Ville);
            oledbcmd.Parameters.AddWithValue("@Telephone", entreprise.Telephone);
            oledbcmd.Parameters.AddWithValue("@CodePostal", entreprise.CodePostal);
            oledbcmd.Parameters.AddWithValue("@Conseiller", entreprise.Conseiller);
            oledbcmd.Parameters.AddWithValue("@Repertoire", entreprise.Path);
            oledbcmd.Parameters.AddWithValue("@Note", entreprise.Note);
            oledbcmd.Parameters.AddWithValue("@NomEntreprise", entreprise.Entreprise);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Modification de l'entreprise            
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //***************************************//
        //Modifier le repertoire d'une Entreprise//
        //***************************************//
        public static int ModifierRepertoire(objEntreprise entreprise)
        {
            //requete à utiliser avec les données donnés en params
            string query = "UPDATE [Entreprise] SET [Repertoire]=? WHERE [NomEntreprise]=?;";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //Parametres de la requete        
            oledbcmd.Parameters.AddWithValue("@Repertoire", entreprise.Path);
            oledbcmd.Parameters.AddWithValue("@NomEntreprise", entreprise.Entreprise);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Modification de l'entreprise            
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }   
    
            //fermeture de la conection à la base de donnée
            oledbcn.Close();            
            return nbLignes;
        }


        //***********************//
        //Suprimer une entreprise//
        //***********************//
        public static int SuprimerEntreprise(string nomEntreprise)
        {
            //requete à utiliser avec les données donnés en params
            string query = "DELETE FROM Entreprise WHERE NomEntreprise LIKE @p1";

            //connection à la base de donnée et associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", nomEntreprise);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Supression de l'entreprise
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //*****************************//
        //Liste toutes les entreprises//
        //*****************************//
        public static List<objEntreprise> ListerEntreprises()
        {
            //requete à utiliser
            string query = "SELECT NomEntreprise FROM Entreprise";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //initialisation du reader
            OleDbDataReader reader = null;

            // Création de la list de retour listEntreprise
            List<objEntreprise> listEntreprise = new List<objEntreprise> { };
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete
                reader = oledbcmd.ExecuteReader();

                //mettre chaque entreprises dans un objet Entreprise
                while (reader.Read())
                {
                    // Création d'un objet Conseiller afin d'ajouter à
                    // la liste de retour (listEntreprise)
                    objEntreprise ent = new objEntreprise((string)reader["NomEntreprise"]);
                    listEntreprise.Add(ent);
                }
            }
            catch (OleDbException ex) { throw ex; }

            //fermeture du reader et de la conection à la base de donnée
            reader.Close();
            oledbcn.Close();

            // Tri de la liste (listEntreprise) et retour de celle-ci
            listEntreprise.Sort((x, y) => string.Compare(x.Entreprise, y.Entreprise));
            //Retour de la liste avec les entreprises
            return listEntreprise;
        }


        //****************************************//
        //Obtenir les infos sur l'entreprise donné//
        //****************************************//
        public static objEntreprise ObtenirInformationEntreprise(string nomEntreprise)
        {
            // Définition de la requête, de la connection à la base 
            // de données & Association de la requête avec la connection
            string query = "SELECT * FROM Entreprise WHERE NomEntreprise = @p1";
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //Parametre de la requete
            oledbcmd.Parameters.AddWithValue("@p1", nomEntreprise);

            //initialisation du reader
            OleDbDataReader reader = null;

            // Création de l'objet Entreprise pour le retour
            objEntreprise oEntreprise = new objEntreprise();
            try
            {
                // Ouverture de la connection & Exécution de la requête
                oledbcn.Open();
                reader = oledbcmd.ExecuteReader();

                // Attribution des paramètres de l'objet de retour oEntreprise
                while (reader.Read())
                {
                    oEntreprise.Entreprise = (string)reader["NomEntreprise"];
                    oEntreprise.Telephone = (string)reader["Telephone"];
                    oEntreprise.Courriel = (string)reader["Courriel"];
                    oEntreprise.Contact = (string)reader["Contacte"];
                    oEntreprise.Conseiller = (int)reader["Conseiller"];
                    oEntreprise.SecteurActivite = (string)reader["SecteurActivité"];
                    oEntreprise.Adresse = (string)reader["Adresse"];
                    oEntreprise.Ville = (string)reader["Ville"];
                    oEntreprise.CodePostal = (string)reader["CodePostal"];

                    try
                    {
                        oEntreprise.Path = (string)reader["Repertoire"];
                        oEntreprise.Note = (string)reader["Note"];
                    }
                    catch (InvalidCastException CastEx)
                    {
                        // Do nothing
                    }
                }
            }
            catch (OleDbException ex) { throw ex; }

            // Fermeture de la connection à la base de données
            // et fermeture du reader
            oledbcn.Close();
            reader.Close();

            // Retour de l'objet entreprise
            return oEntreprise;
        }
    }
}
